﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
using vudu.Presentacion.Contrato.VU_03_Gestionar_Pensum_por_Escuela;
using vudu.Logica.Fachada;
using vudu.ClasesDominio;
using System.Data;

namespace vudu.Presentacion.Presentador.VU_03_Gestionar_Pensum_por_Escuela
{
    public class PresentadorModificarPensumEtapaI
    {
        #region atributos privados

        IContratoModificarPensumEtapaI _vista;
        EnlaceLogico _fachada;
        Escuela _esc;

        #endregion

        #region Constructor

        public PresentadorModificarPensumEtapaI(IContratoModificarPensumEtapaI vista, EnlaceLogico fachada)
        {
            _vista = vista;
            _fachada = fachada;
            _esc = (Escuela) fachada.RolActual;
        }

        #endregion

        #region Propiedades

        public Escuela Esc
        {
            get { return _esc; }
            set { _esc = value; }
        }

        #endregion

        #region Metodos

        /// <summary>
        /// metodo que se encarga de escribir el nombre del usuario logeado
        /// </summary>
        public void MostrarNombreUsuario()
        {
            Escuela esc = (Escuela)_fachada.RolActual;
            _vista.Actor.Text = _rolUsuario + _separador + esc.NombreEscuela;
        }

        /// <summary>
        /// metodo que se encarga de la paginacion de la tabla de pensums
        /// </summary>
        /// <param name="e"></param>
        public void Paginacion(GridViewPageEventArgs e)
        {
            this._vista.TablaPensums.PageIndex = e.NewPageIndex;
            this.ImprimirListaPensums();
        }

        /// <summary>
        /// metodo que se encarga de calcular la diferencia entre el numero de materias traidas y el numero de filas total(8)
        /// para ayudar a rellenar las filas vacias del gridview de materia
        /// </summary>
        /// <param name="totalFilas"></param>
        /// <returns></returns>
        private int Diferencia(int totalFilas)
        {
            int diferencia = 0;
            if (totalFilas < _numeroFilas)
            {
                diferencia = _numeroFilas - totalFilas;
            }
            return diferencia;
        }

        /// <summary>
        /// Cargael Gridview con las materias dependiendo de la informacionque se encuentre en la 
        /// lista "_lsita" la cual contiene la lista de materias pertenecientes a la escuela
        /// seleccionada por el dropdwonlist
        /// </summary>
        private void CargarTablaPensums(List<Pensum> pensums)
        {

            DataTable table = new DataTable();
            table.Columns.Add("Periodo Academico", typeof(string));//la resta entre la fecha de inicio y la fecha fin
            table.Columns.Add("Codigo", typeof(string));//id del pensum

            foreach (Pensum pensum in pensums)
            {
                int idPensum = pensum.IdPensum;
                if (idPensum != 0)
                {
                    table.Rows.Add("( " + pensum.FechaInicio.Day + "/" + pensum.FechaInicio.Month + "/" + pensum.FechaInicio.Year +
                                  " - " + pensum.FechaFin.Day + "/" + pensum.FechaFin.Month + "/" + pensum.FechaFin.Year + " )", pensum.IdPensum);

                }
            }

            this._vista.TablaPensums.DataSource = table;
            this._vista.TablaPensums.DataBind();

        }

        public string RedireccionarA()
        {
            string paginaDestino = "";
            int seleccion = _opcionPorDefecto;
            try
            {
                seleccion = int.Parse(_vista.Opcion.SelectedValue);
                switch (seleccion)
                {
                    case 1://agregar materia
                    {
                        paginaDestino = _paginaAgregarMateria;
                    }
                    break;

                    case 2://eliminar materia
                    {
                        paginaDestino = _paginaEliminarMateria;
                    }
                    break;

                    case 3://agregar prelacion
                    {
                        paginaDestino = _paginaAgregarPrelacion;
                    }
                    break;

                    case 4://eliminar prelacion
                    {
                        paginaDestino = _paginaEliminarPrelacion;
                    }
                    break;

                }
                
                
            }
            catch (Exception)
            {
 
            }
            return paginaDestino;
        }

        /// <summary>
        /// metodo que se encarga de mostrar los pensums inactivos del gridview
        /// </summary>
        public void ImprimirListaPensums()
        {
            List<Pensum> listaPensums = new List<Pensum>();
            if (_esc != null)
            {
                listaPensums = _fachada.ConsultarPensumsInactivosDeEscuela(_esc, _tipoConsulta);
            }
            if (listaPensums.Count == 0)
            {
                _vista.Mensaje.Text = _noPensum;
                _vista.Mensaje.CssClass = _styleError;
                _vista.Mensaje.Visible = true;
                _vista.Opcion.Visible = false;
            }
            else 
                this.CargarTablaPensums(listaPensums);
        }

        /// <summary>
        /// metodo que retornael objeto pensum que fue selecconado por el evento del gridview pensum
        /// </summary>
        /// <returns>pensum seleccionado 
        /// o vacio si no existe
        /// </returns>
        public Pensum ConsultarUnPensum()
        {
            int seleccion = 0;
            Pensum pensumSeleccionado = new Pensum();
            List<Pensum> listaPensums = new List<Pensum>();
            if (_esc != null)
            {
                seleccion = (_vista.TablaPensums.PageIndex * 8) + _vista.TablaPensums.SelectedIndex;
                listaPensums = _fachada.ConsultarPensumsArchivadosDeEscuela(_esc, _tipoConsulta);
                if (seleccion < listaPensums.Count)
                    pensumSeleccionado = listaPensums[seleccion];
            }
            return pensumSeleccionado;
        }

        #endregion

        #region Constantes

        private const int _numeroFilas = 8;
        private const int _tipoConsulta = 2;//lamo al comando consulta que solo traera la lista de pensums inactivos
        private const int _opcionPorDefecto = 1;
        private const string _rolUsuario = "Escuela";
        private const string _separador = ": ";
        private const string _paginaAgregarMateria = "AgregarMateriasPensum.aspx";
        private const string _paginaEliminarMateria = "EliminarMateriaPensum.aspx";
        private const string _paginaAgregarPrelacion = "AgregarPrelacion.aspx";
        private const string _paginaEliminarPrelacion = "EliminarPrelacion.aspx";
        private const string _noPensum = "No hay pensums para modificar";
        private const string _styleError = "transaccionFallida";

        #endregion

       
    }


}